function bucketSort(arr, num) {
    if (arr === null || arr.length < 2) {
        return;
    }
    // 求最大最小值 结合num生成步长
    // 初始化count
    let maxItem = Math.max.apply(Math, arr);
    let minItem = Math.min.apply(Math, arr);
    let step = ~~((maxItem - minItem + 1) / num);

    let count = [];
    // 初始化桶 遍历数组将数组里的数按照自身级别归类
    for (let i = 0; i < arr.length; i++) {
        let index = ~~((arr[i] - minItem) / step);
        if (count[index]) {
            // 插入排序 在桶[]里插入数据
            let j = count[index].length - 1;
            while (j >= 0 && count[index][j] > arr[i]) {
                count[index][j + 1] = count[index][j];
                j--;
            }
            count[index][j + 1] = arr[i];
        } else {
            count[index] = [];
            count[index].push(arr[i]);
        }
    }

    // 直接输出桶 ，桶内部的数据用concat 连接
    let result = [];
    for (let i = 0; i < num+1; i++) {
        if(count[i]){
            result = result.concat(count[i]);
        }
    }
    return result;
}

//let arr = [11, 561, 123, 78, 99, 20];
let arr = [11, 1,5,30,80,98];
console.log(bucketSort(arr, 3));